package com.uinnova.springboot.encache;

import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

/*
*@author 王刚
*@date 2019-01-05 15:45
*@cacheConfig注解，cacheNames缓存的名字，解决了每个缓存都有不同的名字资源的浪费问题
*/
@Service
@CacheConfig(cacheNames = "ehcache_demo")
public class CacheService {

    /*
    *@author 王刚
    *@date 2019-01-05 15:46
    *@Cacheable 注释：当调用这个方法的时候会去查缓存，缓存中 有，直接返回，返回中没有，执行方法并将结果存入缓存
    * condition 条件，为true时直接从缓存获取数据，false执行方法并加入缓存
    * unless判断条件，和condition相反
    */
    @Cacheable(key = "#id",condition = "#id.equals('1') || #id.equals('2')",unless = "#id.equals('2')")
    public String getCache(String id){
        System.out.println("getCache");
        return id;
    }

    /*
    *@author 王刚
    *@date 2019-01-05 15:45
    *删除cache
    */
    @CacheEvict(key = "#id")
    public void cacheEvict(String id){
        System.out.println("cacheEvict");
    }

    /*
    *@author 王刚
    *@date 2019-01-05 15:53
    *@CachePut 插入或者更新cache
    * 必须有返回值才能把结果存入缓存
    */
    @CachePut(key = "#id")
    public String  cachePut(String id){
        System.out.println("cachePut");
        return id;

    }
}
